home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 3.2
/
Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO
/
packet
/
n17jsrc
/
getline.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-22
|
2KB
|
80 lines
/* getline.c version 1.0 PA0GRI */
#include <stdio.h>
#include <ctype.h>
#include "global.h"
/*
* getline()
* to read a line from a domain file and return a usefull line
* completely assembled (if multy line)
* It skips any connent lines. It follows rfc 1133 , 1134 , 1135 , 1136.
*/
char *
getline(fp)
FILE *fp;
{
char *line;
char *contline;
char *chrptr1;
char *chrptr2;
int s1,s2;
int loop = 1;
if(fp == NULLFILE)
return NULLCHAR; /* just in case */
line = mallocw(256); /* get buffer space */
while(loop){
if(fgets(line,256,fp) == NULL){
free(line);
return NULLCHAR;
}
if(line[0] == '#' || line[0] == ';')
continue; /* skip comment lines */
if((s1 = strlen(line)) < 2)
continue; /* empty line */
loop = 0; /* none of above */
}
line[s1-1] = '\0'; /* kill nl */
if((chrptr1 = strchr(line,';')) != NULLCHAR){
*chrptr1 = '\0'; /* eliminate comment */
s1 = strlen(line); /* recompute line size */
}
if((chrptr1 = strchr(line,'(')) != NULLCHAR){ /* continuation */
*chrptr1 = ' '; /* replace with space */
if((chrptr2 = strchr(line,')')) != NULLCHAR){ /* continuation */
*chrptr2 = ' '; /* replace with space */
return line; /* complete line */
}
loop = 1;
}
contline = mallocw(256); /* get buffer space */
while(loop){
if(fgets(contline,256,fp) == NULL){
free(line);
free(contline);
return NULLCHAR;
}
s2 = strlen(contline);
contline[s2-1] = '\0'; /* kill nl */
if(line[0] == '#' || line[0] == ';')
continue; /* skip comment lines */
if((s1 = strlen(line)) < 2)
continue; /* empty line */
if((chrptr1 = strchr(contline,';')) != NULLCHAR){
*chrptr1 = '\0'; /* eliminate comment */
s2 = strlen(contline); /* recompute line size */
}
chrptr1 = mallocw(s1+s2+2);
sprintf(chrptr1,"%s %s",line,contline);
free(line);
line = chrptr1;
if((chrptr2 = strchr(line,')')) != NULLCHAR){ /* continuation */
*chrptr2 = ' '; /* replace with space */
loop = 0;
}
}
free(contline);
return line;
}